package com.gestion.dao;

import com.gestion.dao.interfaces.IItemPedidoDAO;
import com.gestion.modelo.dominio.ItemPedido;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;

/**
 * @author Mauri@<itsoluciones.com.ar>
 */
public class ItemPedidoDAO implements IItemPedidoDAO {

    private static ItemPedidoDAO INSTANCIA = null;

    private static void crearInstancia() {
        INSTANCIA = new ItemPedidoDAO();
    }

    /**
     * Retorna una instancia de <tt>ItemPedidoDAO</tt> si no existe la crea y la
     * guarda en una variable estatica
     *
     * @return un ItemPedidoDAO
     */
    public static ItemPedidoDAO getInstancia() {
        if (INSTANCIA == null) {
            crearInstancia();
        }
        return INSTANCIA;
    }

    /**
     *
     */
    public ItemPedidoDAO() {
        //System.out.println(this.toString());
    }

    /**
     *
     * @param t
     * @return
     */
    @Override
    public ItemPedido insertar(ItemPedido t) {
        throw new UnsupportedOperationException("Not supported yet.");
    }

    /**
     *
     * @param t
     * @return
     */
    @Override
    public ItemPedido modificar(ItemPedido t) {
        throw new UnsupportedOperationException("Not supported yet.");
    }

    /**
     * Retorna todos los ItemPedidos
     *
     * @return lista con ItemPedidos
     */
    @Override
    public List<ItemPedido> getTodos() {
        String sql = "SELECT * FROM itemPedido ";
        List<ItemPedido> lip = null;
        try {
            PreparedStatement ps = FabricaDAO.getConnection().prepareStatement(sql);
            ResultSet rs = ps.executeQuery();
//          ResultSet rs = st.executeQuery(sql);
            if (rs == null) {
                return null;
            } else {
                lip = new ArrayList<ItemPedido>();
                ItemPedido c;
                while (rs.next()) {
                    c = new ItemPedido(rs.getLong("id_itempedido"), rs.getInt("cantidad"),
                            ProductoDAO.getInstancia().getPorId(rs.getLong("producto_id")));
                    lip.add(c);
                }
                return lip;
            }
        } catch (SQLException ex) {
            System.out.println(ex.getMessage());
            return null;
        }
    }

    /**
     *
     * @param valorId
     * @return
     */
    @Override
    //<editor-fold defaultstate="collapsed" desc="No tiene mucho sentido, pero igual se implementó">
    public ItemPedido getPorId(Long valorId) {
        String sql = "SELECT * FROM itempedido WHERE id_itempedido = ?";
        try {
            PreparedStatement ps = FabricaDAO.getConnection().prepareStatement(sql);
            ps.setLong(1, valorId);
            ResultSet rs = ps.executeQuery();
            if (rs.first()) {
                ItemPedido c;
                c = new ItemPedido(rs.getLong("id_pedido"), rs.getInt("cantidad"),//acá cargo todo
                        ProductoDAO.getInstancia().getPorId(rs.getLong("producto_id")));
                return c;
            } else {
                return null;
            }
        } catch (SQLException ex) {
            System.out.println(ex.getMessage());
            return null;
        }
    }
    //</editor-fold>

    /**
     *
     * @param valorId
     * @return
     */
    public List<ItemPedido> listarTodosPorPedido(long valorId) {
        String sql = "SELECT * FROM itempedido WHERE pedido_id=?";
        List<ItemPedido> lip = null;
        try {
            PreparedStatement ps = FabricaDAO.getConnection().prepareStatement(sql);
            ps.setLong(1, valorId);
            ResultSet rs = ps.executeQuery();
//          ResultSet rs = st.executeQuery(sql);
            if (rs == null) {
                return null;
            } else {
                lip = new ArrayList<ItemPedido>();
                ItemPedido c;
                while (rs.next()) {
                    c = new ItemPedido(rs.getLong("id_itempedido"),
                            rs.getInt("cantidad"),
                            ProductoDAO.getInstancia().getPorId(rs.getLong("producto_id")));
                    lip.add(c);
                }
                return lip;
            }
        } catch (SQLException ex) {
            System.out.println(ex.getMessage());
            return null;
        }
    }
}
